package red.book._1._1;

/**
 * 利用牛顿迭代法求平方根。 
 * 
 * 利用切线是曲线的线性逼近这个思想， 不断迭代求出相近解
 * 
 * TODO 求导公式， 复习完高中数学再来看
 * TODO 雷神3中有更快的求解平方根的方式。
 * @author wangbingwu
 *
 */
public class CalculateSquareRootByNewtonIterationMethod {
	public static void main(String[] args) {
		System.out.println(sqrtByNewtonIterationMethod(16L));
	}
	
	public static double sqrtByNewtonIterationMethod(double c) {
		if (c < 0) 
			return Double.NaN;
		
		double err = 1e-15;
		double t = c;
		while (Math.abs(t - c/t) > err * t)
			t = (c/t + t) / 2.0;
		return t;
	}
	
}
